package com.founder.devwork.converter;

import com.founder.devwork.entity.Account;
import com.founder.devwork.persistence.gateway.gitlab.dto.UserDTO;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy;

/**
 * GitAccountConverter 用于将 Git 用户信息转换为系统用户信息。
 * 提供从 UserDTO 到 Account 的转换方法。
 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface GitAccountConverter {
    /**
     * 将 Git 用户信息转换为系统用户信息。
     * @param dto Git 用户信息
     * @return 系统用户信息
     */
    @Mapping(target = "id", ignore = true)
    @Mapping(source = "id", target = "gitId")
    @Mapping(source = "name", target = "acctFullname")
    @Mapping(source = "createdAt", target = "createdAt", qualifiedByName = "toLocalDateTime")
    Account gitAccountDtoToEntity(UserDTO dto);

    /**
     * 将 Instant 转换为 LocalDateTime。
     * @param instant Instant 时间
     * @return LocalDateTime 时间
     */
    @Named("toLocalDateTime")
    default LocalDateTime toLocalDateTime(Instant instant) {
        return instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
}
